/**

 * Definition for singly-linked list.

 * struct ListNode {

 *     int val;

 *     struct ListNode *next;

 * };

 */

// 将链表指针反转,尾节点变成头节点,头节点变成尾节点
// 我们可以通过三个指针来解决这个问题
// 三个相邻指针A , B , C
// 将B指向A,A再跳到B的位置
// B跳到C的位置,C再往后遍历
// 如此循环,直到C往后到NULL
// 此时B处于尾节点位置,反转指针再返回就完成反转

typedef struct ListNode ListNode ;

struct ListNode* reverseList(struct ListNode* head) 
{

    if (!head)

    {

        return NULL ;

    }

    ListNode *phead , *ptail , *pcur ;

    phead = NULL , ptail = head , pcur = head -> next ;

    while (pcur)
    {

        ptail -> next = phead ;

        phead = ptail ;

        ptail = pcur ;

        pcur = pcur -> next ;

    }

    ptail -> next = phead ;

    return ptail ;

}